package main

//给定一个不含重复数字的数组 nums ，返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
//
//
//
// 示例 1：
//
//
//输入：nums = [1,2,3]
//输出：[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
//
//
// 示例 2：
//
//
//输入：nums = [0,1]
//输出：[[0,1],[1,0]]
//
//
// 示例 3：
//
//
//输入：nums = [1]
//输出：[[1]]
//
//
//
//
// 提示：
//
//
// 1 <= nums.length <= 6
// -10 <= nums[i] <= 10
// nums 中的所有整数 互不相同
//
// Related Topics 数组 回溯 👍 1832 👎 0

//leetcode submit region begin(Prohibit modification and deletion)
func permute(nums []int) (result [][]int) {
	signal := make([]bool, len(nums))
	var dfs func(ans []int)
	dfs = func(ans []int) {
		if len(ans) == len(nums) {
			result = append(result, ans)
		}
		for i := 0; i < len(nums); i++ {
			if !signal[i] {
				signal[i] = true
				dfs(append(ans, nums[i]))
				signal[i] = false
			}
		}
	}
	dfs([]int{})
	return result
}

//leetcode submit region end(Prohibit modification and deletion)
